import { ERC20 } from '@services/EthService';
import { toWei } from '@utils';

const MYCRYPTO_ADDRESS = '0x7cB57B5A97eAbe94205C07890BE4c1aD31E486A8';

describe('ERC20', () => {
  describe('balanceOf', () => {
    it('should generate the correct data for checking the balance', () => {
      const data = ERC20.balanceOf.encodeInput({ _owner: MYCRYPTO_ADDRESS });
      expect(data).toBe(
        '0x70a082310000000000000000000000007cb57b5a97eabe94205c07890be4c1ad31e486a8'
      );
    });
  });

  describe('transfer encoding input', () => {
    it('should generate the correct data for a transfer', () => {
      // Test data generated by sending 1 GNT to the MyC address

      const value = toWei('1', 18);
      const data = ERC20.transfer.encodeInput({ _to: MYCRYPTO_ADDRESS, _value: value });
      expect(data).toBe(
        '0xa9059cbb0000000000000000000000007cb57b5a97eabe94205c07890be4c1ad31e486a80000000000000000000000000000000000000000000000000de0b6b3a7640000'
      );
    });
  });

  describe('transfer decoding input', () => {
    // Test data generated by sending 0.001 GNT to the MyC address
    it('should return the correct transaction given some data', () => {
      const tx = ERC20.transfer.decodeInput(
        '0xa9059cbb0000000000000000000000007cb57b5a97eabe94205c07890be4c1ad31e486a800000000000000000000000000000000000000000000000000038d7ea4c68000'
      );

      expect(tx._to).toBe(MYCRYPTO_ADDRESS);
      expect(tx._value.toString()).toBe(toWei('0.001', 18).toString());
    });
  });
});
